"""
@Author : 合肥一元数智教育科技有限公司
@Date :  2025/11/11 8:42
@Description :  socket  套接字    网络通信

服务端  socket server     监听客户端连接  实现信息转发
客户端  socket client     连接服务器  实现信息发送和接收

"""
import socket
import threading

#  创建服务端  参数1  网络通信模式    参数2 tcp通信协议
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 初始化服务端参数
s.bind(('localhost', 9999))
# 最大挂起个数
s.listen(2)


#  接收信息任务 task
def message_task(conn, addr, connections):
    while True:
        client_message: str = conn.recv(1024).decode('utf-8')
        #  接收到什么消息  转发给已连接的客户端
        for connection in connections:
            if connection != conn:
                connection.send(f'{addr} message: {client_message}'.encode('utf-8'))
        if client_message:
            #  服务端打印信息
            print(f'客户端{addr}message : {client_message}')
        else:
            break
    conn.close()


# 所有连接的客户端信息
connections = []
print("服务端启动,开始监听客户端连接...")
while True:
    # 监听客户端的连接  (连接对象,IP&port)
    conn, addr = s.accept()  # 程序阻塞    input
    connections.append(conn)
    print("一个客户端连接了...")
    # 创建线程  接收信息
    threading.Thread(target=message_task, args=(conn, addr, connections)).start()
